//package com.zmn.plat.common.util.aspect;
//
//import com.zmn.mcc.cas.web.StaffAdminService;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.Signature;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Field;
//import java.util.Date;
//import java.util.Objects;
//import java.util.Optional;
//import java.util.stream.Stream;
//
///**
// * 描述: AOP实现创建人,创建时间,修改人,修改时间的填充
// *
// * @author guoqiao
// * @since 2021/8/13 10:26
// */
//@Slf4j
//@Aspect
//@Component
//public class FillRecordAspect {
//
//    private static final String CREATER = "creater";
//    private static final String CREATER_TIME = "createTime";
//    private static final String UPDATER = "updater";
//    private static final String UPDATER_TIME = "updateTime";
//
//    /**
//     * 设定切入点
//     */
//    @Pointcut(value = "@annotation(com.zmn.plat.common.util.aspect.FillRecord)")
//    private void pointCutMethod() {
//    }
//
//    @Around(value = "pointCutMethod() && @annotation(FillRecord)")
//    public Object FillRecord(ProceedingJoinPoint joinPoint, FillRecord FillRecord) throws Throwable {
//
//        try {
//            // 获取用户名
//            String staffName = Optional.ofNullable(StaffAdminService.currentStaff()).orElse(null).getRealName();
//
//            // 获取拦截方法名
//            Signature sig = joinPoint.getSignature();
//            MethodSignature ms = (MethodSignature) sig;
//            String methodName = ms.getMethod().getName();
//
//            // 获取拦截参数
//            Object[] args = joinPoint.getArgs();
//            Object arg = Stream.of(args).findFirst().orElse(null);
//            Class<?> aClass = arg.getClass();
//
//            if (methodName.contains("insert")) {
//                // 赋值创建人
//                Field createrField = aClass.getDeclaredField(CREATER);
//                createrField.setAccessible(true);
//                createrField.set(arg, staffName);
//                // 赋值创建时间
//                Field createrTimeField = aClass.getDeclaredField(CREATER_TIME);
//                createrTimeField.setAccessible(true);
//                createrTimeField.set(arg, new Date());
//            }
//            // 赋值修改人
//            Field updaterField = aClass.getDeclaredField(UPDATER);
//            updaterField.setAccessible(true);
//            updaterField.set(arg, staffName);
//            // 赋值修改时间
//            Field updaterTimeField = aClass.getDeclaredField(UPDATER_TIME);
//            updaterTimeField.setAccessible(true);
//            updaterTimeField.set(arg, new Date());
//
//            return joinPoint.proceed(args);
//        } catch (Throwable e) {
//            log.error("填充记录失败,原因:{}", e.getMessage(), e);
//            return joinPoint.proceed();
//        }
//    }
//
//}
